home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / d / mtlists.d < prev    next >
Text File  |  1997-10-26  |  5KB  |  121 lines

  1. (*----------------------------------------------------------------------*
  2.  *                                                                      *
  3.  *  MAGICTOOLS   Modula's  All purpose  GEM  Interface  Cadre  Toolbox  *
  4.  *               ÿ         ÿ            ÿ    ÿ          ÿ               *
  5.  *----------------------------------------------------------------------*
  6.  * Version 3.30  02.02.1992     (C)90/91/92 by Peter Hellinger Software *
  7.  *----------------------------------------------------------------------*
  8.  *            Dieses Modul ist urheberrechtlich geschtzt.              *
  9.  *                                                                      *
  10.  * Die Ver”ffentlichung des Quelltextes oder Teilen daraus, sowie die   *
  11.  * Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
  12.  * oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail-    *
  13.  * boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen    *
  14.  * Einverst„ndnisserkl„rung des Autors.                                 *
  15.  *                                                                      *
  16.  * Die Verbreitung des Moduls als Teil eines gelinkten Programms ist    *
  17.  * fr Lizenznehmer ausdrcklich erlaubt!  Der Autor beh„lt sich das    *
  18.  * Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
  19.  * widerrufen.                                                          *
  20.  *----------------------------------------------------------------------*)
  21.  
  22. (*----------------------------------------------------------------------*
  23.  * mtLists      Listenverwaltung                                        *
  24.  *                                                                      *
  25.  * Implementiert eine geordnete Liste. Durch die typlose Datenform der  *
  26.  * zu speichernden Information kann das Modul sehr flexibel eingesetzt  *
  27.  * werden.  Maximale Speichergr”že der Information ist 32kb.            *
  28.  *----------------------------------------------------------------------*)
  29.  
  30. DEFINITION MODULE mtLists;
  31.  
  32. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
  33.                         Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
  34.                         Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
  35.                         sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
  36.  
  37.  
  38.  
  39.  
  40.  
  41. IMPORT SYSTEM;
  42.  
  43. TYPE    ENTRY;  (* Eintrag in die Liste *)
  44.  
  45. TYPE    LIST;   (* Listentyp *)
  46.  
  47. TYPE    CompResult =    (smaller, equal, bigger);
  48.         CompProc =      PROCEDURE ( (* left *)  SYSTEM.ADDRESS, 
  49.                                     (* right *) SYSTEM.ADDRESS): CompResult;
  50. (* Eine Prozedur dieses Typs definiert die Ordnung, in der die Liste
  51.  * angelegt wird.
  52.  * Die Prozedur soll "smaller" returnieren, wenn der Eintrag left kleiner
  53.  * bzw. logisch VOR right einzuordnen ist; equal, wenn die Eintr„ge gleich
  54.  * sind; und bigger wenn der Eintrag left gr”žer bzw. logisch NACH right
  55.  * einzuordnen ist. Die Prozedur bekommt immer POINTER bergeben, daher die
  56.  * ADDRESS-Parameter.
  57.  *
  58.  * Beispiel fr eine CompProc:
  59.  *
  60.  * PROCEDURE Compare (left, rigth: ADDRESS): CompResult;
  61.  * VAR l, r: POINTER TO ARRAY [0..10] OF CHAR;
  62.  * BEGIN
  63.  *  l:= left;  r:= right;
  64.  *  IF l^[0] < r^[0] THEN RETURN smaller; END;
  65.  *  IF l^[0] = r^[0] THEN RETURN equal; END;
  66.  *  RETURN bigger;
  67.  * END Compare;
  68.  *
  69.  *)
  70.  
  71. PROCEDURE NewList (VAR list: LIST; comp: CompProc): BOOLEAN;
  72. (* Generiert eine neue Liste *)
  73.  
  74. PROCEDURE DisposeList (VAR list: LIST);
  75. (* L”scht eine Liste, wenn die Liste nicht leer ist, wird sie vorher
  76.  * gel”scht.
  77.  *)
  78.  
  79. PROCEDURE ListEntries (list: LIST): lCARDINAL;
  80. (* Liefert Anzahl der Eintr„ge in der Liste *)
  81.  
  82. PROCEDURE NilEntry (): ENTRY;
  83. (* Liefert einen leeren Pointer, zum Vergleichen usw. *)
  84.  
  85. PROCEDURE InsertEntry (list: LIST; info: ARRAY OF LOC): BOOLEAN;
  86. (* Legt ein Element in der Liste ab, FALSE wenn dabei ein Fehler auftritt *)
  87.  
  88. PROCEDURE SearchEntry (list: LIST; from: ENTRY;
  89.                        info: ARRAY OF LOC;  key: CompProc): ENTRY;
  90. (* Sucht in der Liste nach dem Element info, liefert einen Zeiger darauf.
  91.  * from ist das Element, ab dem gesucht wird! Mit key wird eine Prozedur
  92.  * bergeben, die die Elemente vergleicht. Liefert key ein equal, wird die
  93.  * Prozedur abgebrochen, und der Eintrag returniert. Tip: Die in info ber-
  94.  * gebenen Daten mssen ja nicht komplett sein. Es kommt auf die Prozedur
  95.  * key an...
  96.  *)
  97.  
  98. PROCEDURE DeleteEntry (list: LIST; VAR entry: ENTRY);
  99. (* L”scht einen Eintrag aus der Liste *)
  100.  
  101. PROCEDURE FirstEntry (list: LIST): ENTRY;
  102. (* Liefert den ersten Eintrag der Liste *)
  103.  
  104. PROCEDURE LastEntry (list: LIST): ENTRY;
  105. (* Liefert den letzten Eintrag der Liste *)
  106.  
  107. PROCEDURE NextEntry (entry: ENTRY): ENTRY;
  108. (* Liefert den nachfolgenden Eintrag der Liste *)
  109.  
  110. PROCEDURE PrevEntry (entry: ENTRY): ENTRY;
  111. (* Liefert den vorhergehenden Eintrag der Liste *)
  112.  
  113. PROCEDURE GetEntry (entry: ENTRY; VAR info: ARRAY OF LOC): BOOLEAN;
  114. (* šbertr„gt ein Element aus der Liste. Es wird nur kopiert, wenn die
  115.  * Datenstruktur gleich oder gr”žer als die gespeicherte Struktur ist.
  116.  * FALSE wenn dabei ein Fehler auftritt (info zu klein, entry NIL).
  117.  *)
  118.  
  119. END mtLists.
  120.                                
  121.